package com.zyzd.commontools.utils;

import android.text.TextUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * Created by lzy on 2019/1/23 0023.
 * description ${字符串工具类}
 */
public class StringUtils {

    /**
     * @param str 需要转换的字符串
     * @return 当空字符串转为null
     */
    public static String nullIfEmpty(String str) {
        return TextUtils.isEmpty(str) ? null : str;
    }

    /**
     * @param str 需要转换的字符串
     * @return 当null转为空字符串
     */
    public static String emptyIfNull(String str) {
        return str == null ? "" : str;
    }

    /**
     * @param numericalStr 需要判断的字符串
     * @return 是否是一个数值
     */
    public static boolean isNumeric(String numericalStr) {
        return !TextUtils.isEmpty(numericalStr) && numericalStr.matches("-?[0-9]+.*[0-9]*");
    }

    /**
     * @param numericalStr 需要判断的字符串
     * @return 是否是整数
     */
    public static boolean isInteger(String numericalStr) {
        return !TextUtils.isEmpty(numericalStr) && numericalStr.matches("-?[0-9]+");
    }

    /**
     * 去除小数无效0
     *
     * @param numberStr 数字字符串
     * @return 返回去除小数无效0后的的数值字符串，当字符串为空时返回0
     */
    public static String stripTrailingZeros(String numberStr) {
        if (TextUtils.isEmpty(numberStr)) return "0";
        try {
            return new BigDecimal(numberStr).stripTrailingZeros().toPlainString();
        } catch (Throwable e) {
            return "0";
        }
    }

    /**
     * @param number       需要转化的数字
     * @param newScale     保留小数位
     * @param roundingMode 精度处理方式
     * @return 返回格式化保留指定小数位数的字符串
     */
    public static String formatNumberRetainZero(double number, int newScale, RoundingMode roundingMode) {
        return BigDecimal.valueOf(number).setScale(newScale, roundingMode).toPlainString();
    }

    /**
     * @param numberStr    需要转化的数值字符串
     * @param newScale     保留小数位
     * @param roundingMode 精度处理方式
     * @return 返回格式化保留指定小数位数的字符串
     */
    public static String formatNumberRetainZero(String numberStr, int newScale, RoundingMode roundingMode) {
        if (TextUtils.isEmpty(numberStr)) return "0";
        return new BigDecimal(numberStr).setScale(newScale, roundingMode).toPlainString();
    }

    /**
     * @param number       需要转化的数字
     * @param newScale     保留小数位
     * @param roundingMode 精度处理方式
     * @return 返回格式化小数位数，并取出无效0的字符串
     */
    public static String formatNumber(double number, int newScale, RoundingMode roundingMode) {
        return BigDecimal.valueOf(number).setScale(newScale, roundingMode).stripTrailingZeros().toPlainString();
    }

    /**
     * @param numberStr    需要转化的数字
     * @param newScale     保留小数位
     * @param roundingMode 精度处理方式
     * @return 返回格式化小数位数，并取出无效0的字符串
     */
    public static String formatNumber(String numberStr, int newScale, RoundingMode roundingMode) {
        if (TextUtils.isEmpty(numberStr)) return "0";
        return new BigDecimal(numberStr).setScale(newScale, roundingMode).stripTrailingZeros().toPlainString();
    }
}
